#include <random>
#include <iomanip>
#include <iostream>
#include <sstream> 
#include <atomic>

std::string uuid() {
    //   生成一个由16位随机字符组成的字符串作为唯一ID
    // 1. 生成 6个 0~255 之间的随机数字 (1字节-转换为16进制字符) -- 生成12位16进制字符
    std::random_device rd;                      // 实例化设备随机数对象-用于生成设备随机数 （效率低）只用 std::random_device 生成种子
    std::mt19937 generator(rd());               // 以设备随机数为种子，实例化伪随机数对象
    std::uniform_int_distribution<int> distribution(0, 255); // 限定数据范围

    std::stringstream ss;
    for (int i = 0; i < 6; i++) {
        if (i == 2) ss << "-";
        ss << std::setw(2) << std::setfill('0') << std::hex << distribution(generator);
    }
    ss << "-";
    // 2. 通过一个静态变量生成一个2字节的编号数字--生成4位16进制数字字符
    static std::atomic<int> idx(0);
    short tmp = idx.fetch_add(1);
    ss << std::setw(4) << std::setfill('0') << std::hex << tmp;
    return ss.str();
}

int main() {
	std::cout << uuid(); 
	return 0;
} 